# import pytest
"""
给定一个表示 大整数 的整数数组 digits，其中 digits[i] 是整数的第 i 位数字。这些数字按从左到右，从最高位到最低位排列。这个大整数不包含任何前导 0。

将大整数加 1，并返回结果的数字数组。



示例 1：

输入：digits = [1,2,3]
输出：[1,2,4]
解释：输入数组表示数字 123。
加 1 后得到 123 + 1 = 124。
因此，结果应该是 [1,2,4]。
示例 2：

输入：digits = [4,3,2,1]
输出：[4,3,2,2]
解释：输入数组表示数字 4321。
加 1 后得到 4321 + 1 = 4322。
因此，结果应该是 [4,3,2,2]。
示例 3：

输入：digits = [9]
输出：[1,0]
解释：输入数组表示数字 9。
加 1 得到了 9 + 1 = 10。
因此，结果应该是 [1,0]。


提示：

1 <= digits.length <= 100
0 <= digits[i] <= 9
digits 不包含任何前导 0。
"""


class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        # 普通情况
        for i in range(len(digits) - 1, -1, -1):
            if digits[i] < 9:
                digits[i] += 1
                return digits
            digits[i] = 0
        #  处理全是9的情况
        return [1] + digits



class TestPlusOne:
    def setup_method(self):
        self.solution = Solution()

    def test_normal_case(self):
        # 测试普通情况，如示例1
        assert self.solution.plusOne([1, 2, 3]) == [1, 2, 4]

        # 测试示例2
        assert self.solution.plusOne([4, 3, 2, 1]) == [4, 3, 2, 2]

        # 测试中间有进位的情况
        assert self.solution.plusOne([1, 2, 9]) == [1, 3, 0]
        assert self.solution.plusOne([1, 9, 9]) == [2, 0, 0]

    def test_single_digit(self):
        # 测试单位数情况
        assert self.solution.plusOne([0]) == [1]
        assert self.solution.plusOne([5]) == [6]
        assert self.solution.plusOne([9]) == [1, 1]

    def test_all_nines(self):
        # 测试所有位都是9的情况，如示例3
        assert self.solution.plusOne([9]) == [1, 0]
        assert self.solution.plusOne([9, 9]) == [1, 0, 0]
        assert self.solution.plusOne([9, 9, 9]) == [1, 0, 0, 0]
        assert self.solution.plusOne([9, 9, 9, 9]) == [1, 0, 0, 0, 0]

    def test_edge_cases(self):
        # 测试边界情况
        assert self.solution.plusOne([1]) == [2]
        assert self.solution.plusOne([1, 0]) == [1, 1]
        assert self.solution.plusOne([1, 9]) == [2, 0]

